home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Misc / GMS / GMSDev / Source / Asm / Demos / Julia.s < prev    next >
Encoding:
Text File  |  1997-12-14  |  6.6 KB  |  332 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2. ;Name:      Julia
  3. ;Author:    Paul Manias
  4. ;Copyright: DreamWorld Productions (c) 1996-1997.  Freely distributable.
  5. ;
  6. ;A fractal generator, not orginally written by myself but now works with GMS.
  7.  
  8.     INCDIR    "INCLUDES:"
  9.     INCLUDE    "dpkernel/dpkernel.i"
  10.  
  11.     SECTION    "Demo",CODE
  12.  
  13. ;==========================================================================;
  14. ;                             INITIALISE DEMO
  15. ;==========================================================================;
  16.  
  17.     STARTDPK
  18.  
  19. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  20.     move.l    DPKBase(pc),a6
  21.     lea    ScreenTags(pc),a0
  22.     sub.l    a1,a1
  23.     CALL    Init
  24.     tst.l    d0
  25.     beq.s    Exit
  26.  
  27.     move.l    Screen(pc),a0
  28.     CALL    Display
  29.  
  30.     bra.s    Julia
  31.  
  32. Exit:    move.l    DPKBase(pc),a6
  33.     move.l    Screen(pc),a0
  34.     CALL    Free
  35.     MOVEM.L    (SP)+,A0-A6/D1-D7
  36.     moveq    #ERR_OK,d0
  37.     rts
  38.  
  39. ;==========================================================================;
  40. ;                                DRAW JULIA
  41. ;==========================================================================;
  42.  
  43. Julia:    lea    DataArea(pc),a5
  44.     move.l    #$fffffffe,(a5)+    ;a5 = $fffffffe+
  45.     move.l    #$80000014,(a5)+    ;a5 = mask & word per raster count
  46.  
  47. StartJulia:
  48.     move.l    BLTBase(pc),a6
  49.     move.l    Screen(pc),a0
  50.     move.l    GS_Bitmap(a0),a0
  51.     CALL    bltClearBitmap
  52.  
  53.     move.l    Screen(pc),a0
  54.     move.l    GS_MemPtr1(a0),a0
  55.     lea    JuliaData(pc),a6
  56.     move.l    (a6)+,(a5)    ;a5 = ?
  57. .JuliaFound
  58.     move.w    (a5),MValue    ;initial m
  59.     move.w    (a6),PixStep    ;pixel step
  60.     move.w    (a6)+,RastStep    ;raster step
  61.     move.l    (a6)+,C1C2    ;initial c1 and c2
  62.     move.w    #256,LinesLeft(a5)    ;vertical height
  63.     lea    256*40(a0),a1
  64.     lea    256*40(a1),a2
  65.     lea    256*40(a2),a3
  66.     lea    $04000000,a6    ;for magnitude test
  67.  
  68.     lea    256*40(a3),a4
  69.  
  70.     MOVEM.L    A6/A0-A1/D0-D1,-(SP)
  71.     move.l    SCRBase(pc),a6
  72.     CALL    scrWaitVBL
  73.     MOVEM.L    (SP)+,A6/A0-A1/D0-D1
  74.  
  75. PixelLoop:
  76.     move.w    (a5),d1    ;d1 = Initial X
  77.     move.w    InitialY(a5),d0    ;d0 = Initial Y
  78.     moveq    #30,d7    ;d7 = 30.
  79.     movem.w    C1C2(pc),d4-d5    ;MA : d4/d5 = C1/C2
  80.     move.w    d0,d2    ;d2 = Initial Y
  81.     move.w    d1,d3    ;d3 = Initial X
  82.     bra.s    CheckMagnitude
  83.  
  84. IterateJulia:
  85.     sub.l    d3,d2    ;x^2 - y^2
  86.     lsl.l    #4,d2    ;fix decimal point
  87.     swap    d2    ;...
  88.     add.w    d4,d2    ;x1 = x^2 - y^2 + c1
  89.  
  90.     move.w    d1,d3    ;y
  91.     muls    d0,d3    ;x * y
  92.     lsl.l    #5,d3    ;fix decimal point and multiply by 2
  93.     swap    d3    ;...
  94.     add.w    d5,d3    ;y1 = 2 * x * y + c2
  95.  
  96.     move.w    d2,d0    ;x = x1
  97.     move.w    d3,d1    ;y = y1
  98.  
  99. CheckMagnitude:
  100.     muls    d2,d2    ;x^2
  101.     muls    d3,d3    ;y^2
  102.     move.l    d2,d6
  103.     add.l    d3,d6    ;z = x^2 + y^2
  104.     cmp.l    a6,d6    ;escaped yet?
  105.     dbhi    d7,IterateJulia
  106.  
  107.     move.w    PixelMask(a5),d6
  108.     moveq    #0,d5
  109.     move.b    JumpTable+1(pc,d7.w),d5
  110.     jmp    JumpTable(pc,d5.w)
  111.  
  112. JumpTable:
  113.     dc.b    Plot00-JumpTable
  114.     dc.b    Plot31-JumpTable
  115.     dc.b    Plot30-JumpTable
  116.     dc.b    Plot29-JumpTable
  117.     dc.b    Plot28-JumpTable
  118.     dc.b    Plot27-JumpTable
  119.     dc.b    Plot26-JumpTable
  120.     dc.b    Plot25-JumpTable
  121.     dc.b    Plot24-JumpTable
  122.     dc.b    Plot23-JumpTable
  123.     dc.b    Plot22-JumpTable
  124.     dc.b    Plot21-JumpTable
  125.     dc.b    Plot20-JumpTable
  126.     dc.b    Plot19-JumpTable
  127.     dc.b    Plot18-JumpTable
  128.     dc.b    Plot01-JumpTable
  129.     dc.b    Plot16-JumpTable
  130.     dc.b    Plot15-JumpTable
  131.     dc.b    Plot14-JumpTable
  132.     dc.b    Plot13-JumpTable
  133.     dc.b    Plot12-JumpTable
  134.     dc.b    Plot11-JumpTable
  135.     dc.b    Plot10-JumpTable
  136.     dc.b    Plot09-JumpTable
  137.     dc.b    Plot08-JumpTable
  138.     dc.b    Plot07-JumpTable
  139.     dc.b    Plot06-JumpTable
  140.     dc.b    Plot05-JumpTable
  141.     dc.b    Plot04-JumpTable
  142.     dc.b    Plot03-JumpTable
  143.     dc.b    Plot02-JumpTable
  144.     dc.b    Plot17-JumpTable
  145.  
  146. Plot22:    or.w    d6,(a4)
  147.     or.w    d6,(a2)
  148.     or.w    d6,(a1)
  149.     bra.b    Plot00
  150.  
  151. Plot21:    or.w    d6,(a4)
  152.     or.w    d6,(a2)
  153.     or.w    d6,(a0)
  154.     bra.b    Plot00
  155.  
  156. Plot20:    or.w    d6,(a4)
  157.     or.w    d6,(a2)
  158.     bra.b    Plot00
  159.  
  160. Plot18:    or.w    d6,(a4)
  161.     or.w    d6,(a1)
  162.     bra.b    Plot00
  163.  
  164. Plot26:    or.w    d6,(a4)
  165. Plot10:    or.w    d6,(a3)
  166.     or.w    d6,(a1)
  167.     bra.b    Plot00
  168.  
  169. Plot23:    or.w    d6,(a4)
  170.     or.w    d6,(a2)
  171.     or.w    d6,(a1)
  172.     or.w    d6,(a0)
  173.     bra.b    Plot00
  174.  
  175. Plot19:    or.w    d6,(a4)
  176.     or.w    d6,(a1)
  177.     or.w    d6,(a0)
  178.     bra.b    Plot00
  179.  
  180. Plot27:    or.w    d6,(a4)
  181. Plot11:    or.w    d6,(a3)
  182.     or.w    d6,(a1)
  183.     or.w    d6,(a0)
  184.     bra.b    Plot00
  185.  
  186. Plot17:    or.w    d6,(a4)
  187.     or.w    d6,(a0)
  188.     bra.b    Plot00
  189.  
  190. Plot25:    or.w    d6,(a4)
  191. Plot09:    or.w    d6,(a3)
  192.     or.w    d6,(a0)
  193.     bra.b    Plot00
  194.  
  195. Plot29:    or.w    d6,(a4)
  196. Plot13:    or.w    d6,(a3)
  197. Plot05:    or.w    d6,(a2)
  198.     or.w    d6,(a0)
  199.     bra.b    Plot00
  200.  
  201. Plot16:    or.w    d6,(a4)
  202.     bra.b    Plot00
  203.  
  204. Plot24:    or.w    d6,(a4)
  205. Plot08:    or.w    d6,(a3)
  206.     bra.b    Plot00
  207.  
  208. Plot28:    or.w    d6,(a4)
  209. Plot12:    or.w    d6,(a3)
  210. Plot04:    or.w    d6,(a2)
  211.     bra.b    Plot00
  212.  
  213. Plot30:    or.w    d6,(a4)
  214. Plot14:    or.w    d6,(a3)
  215. Plot06:    or.w    d6,(a2)
  216. Plot02:    or.w    d6,(a1)
  217.     bra.b    Plot00
  218.  
  219. Plot31:    or.w    d6,(a4)
  220. Plot15:    or.w    d6,(a3)
  221. Plot07:    or.w    d6,(a2)
  222. Plot03:    or.w    d6,(a1)
  223. Plot01:    or.w    d6,(a0)
  224.  
  225. Plot00:    MOVE.L    D0,-(SP)
  226.     move.w    PixStep(pc),d0
  227.     add.w    d0,(a5)    ;pixel "step"
  228.     MOVE.L    (SP)+,D0
  229.  
  230.     ror.w    PixelMask(a5)    ;shift mask over
  231.     bpl.w    PixelLoop
  232.  
  233.     addq.w    #2,a0
  234.     addq.w    #2,a1
  235.     addq.w    #2,a2
  236.     addq.w    #2,a3
  237.     addq.w    #2,a4
  238.     subq.w    #1,WordsInRaster(a5)    ; subtract from word counter
  239.     bne.w    PixelLoop
  240.  
  241.     btst.b    #6,$bfe001
  242.     beq    Exit
  243.  
  244.     move.w    #320/16,WordsInRaster(a5) ; words per raster
  245.     btst.b    #2,$dff016    ;new julia?
  246.     beq.b    NewJulia
  247.  
  248. RasterInit:
  249.     move.w    MValue(pc),(a5)    ;inital M value
  250. RasterAdd:
  251.     MOVE.L    D0,-(SP)
  252.     move.w    RastStep(pc),d0
  253.     add.w    d0,InitialY(a5)    ; raster "step"
  254.     MOVE.L    (SP)+,D0
  255.     subq.w    #1,LinesLeft(a5)
  256.     bne.w    PixelLoop
  257.  
  258. WaitMouse:
  259.     btst.b    #6,$bfe001
  260.     beq    Exit
  261.     btst.b    #2,$dff016
  262.     bne.b    WaitMouse
  263.  
  264. NewJulia:
  265.     btst.b    #2,$dff016
  266.     beq.b    NewJulia
  267.     bra.w    StartJulia
  268.  
  269. ;===========================================================================;
  270. ;                                  DATA
  271. ;===========================================================================;
  272.  
  273. MValue:        dc.w  0
  274. PixStep:    dc.w  0
  275. RastStep:    dc.w  0
  276. C1C2:        dc.l  0
  277.  
  278. ScreenTags:    dc.l  TAGS_SCREEN
  279. Screen:        dc.l  0
  280.         dc.l  GSA_Palette,.palette
  281.         dc.l  GSA_Width,320
  282.         dc.l  GSA_Height,256
  283.         dc.l    GSA_BitmapTags,0
  284.         dc.l    BMA_Type,PLANAR
  285.         dc.l    BMA_AmtColours,32
  286.         dc.l    TAGEND,0
  287.         dc.l  TAGEND
  288.  
  289. .palette    dc.l  PALETTE,32
  290.         dc.l  $000000,$803010,$0000e0,$0000d0,$0000c0,$0000b0,$0000a0,$000090
  291.         dc.l  $000080,$000070,$100060,$200050,$300040,$400030,$500020,$601010
  292.         dc.l  $702000,$0000f0,$904020,$a05030,$b06040,$c07050,$d08060,$c09070
  293.         dc.l  $b0a080,$a090a0,$9080b0,$807090,$706070,$505050,$304030,$103010
  294.  
  295. JuliaData:
  296.     dc.l    $f800eb00
  297.     dc.w    $0018,$0100,$0ad0,$ec00
  298.  
  299.     dc.l    $fd21eeae
  300.     dc.w    $0225,$000d,$f420,$fd43
  301.  
  302.     dc.l    $ef000010
  303.     dc.w    $0600,$0100,$f226,$fd56
  304.  
  305.     dc.l    $0015ee00
  306.     dc.w    $fb40,$ede2,$f0b2,$001d
  307.  
  308.     dc.l    $05c0ff00
  309.     dc.w    $ef12,$e812,$001d,$f320
  310.     dc.l    0
  311.  
  312.  
  313.         rsset -4
  314. PixelMask    rs.w  1    ;mask to "OR" with bitplanes
  315. WordsInRaster    rs.w  1    ;number of words left in current raster
  316. InitialX    rs.w  1    ;inital x
  317. InitialY    rs.w  1    ;inital y
  318. LinesLeft    rs.w  1    ;number of lines left to draw
  319.  
  320.         dc.l  0
  321. DataArea:    ds.b  40
  322.  
  323. ;===========================================================================;
  324.  
  325. ProgName:    dc.b  "Julia",0
  326. ProgAuthor:    dc.b  "Unknown",0
  327. ProgDate:    dc.b  "10 December 1997",0
  328. ProgCopyright:    dc.b  "Freely distributable.",0
  329. ProgShort:    dc.b  "Julia generator.",0
  330.         even
  331.  
  332.